//两位数码管
//**************
int inpin=0;
int setpin=1;//电位器
int ledpin=12;
boolean state=0;
int statepin=13;
int segmentpins[]={9,8,7,6,5,4,3,2};
int selectpins[]={10,11};
int tempbit[4];
byte numbers[]
{
B111111100,//0
B01100000,
B11011010,
B11110010,
B01100110,
B10110110,
B00111110,
B11100000,
B11111110,
B1110010,//9
B00000001,//DP

}; 
void setup()
{
pinmode(ledpin,output);
pinmode(statepin,output);
for (int i=0;i<8;i++0)
	{
	pinmode(segmentpins[i],output);
	}
for(int j=0;j<2;j++)
	{
	pinmode(selectpins[j],output);//位选
	}

}
void loop
{
int val=analogRead(inpin);//lm35
int temp=(val/1024.0)*5000/10;//整型
int alerttemp=map(analogread(setpin),0,1023,0,100);//电位器等比映射转换
if(temp>alerttemp)
	{
	digitalWrite(ledpin,high);//12号
	}
else
	{
	digitalwrite(ledpin,low);
	}
for(int m=3,m>=2,m--)
	{
	tempbit[m]=temp%10;//65
	temp100=temp/10;//5//6
	}//存储两位温度在数组3,2位
for(int q=1;q>=0;q--)
	{
	tempbit[q]=alerttemp%10;//报警设置温度,存在1,0位
	alerttemp=alerttemp/10;
	

	}
if(state==0){
for(int i=0;i<200;i++)
	{
	digitalwrite(statepin,high);//13脚主要接一个数码管第四位用于标记0是当前温度,1表示报警温度
	numbershow(0);显示0
	delay(5);
	digitalerite(statepin,low);//关掉
	digitalwrite(selectpins[0],high);//选中第一位
	numbershow(tempbit[2]);//显示当前温度状态第一位
	delay(5);
	digitalwrite(selectpins[0],low);释放一位
	digitalwrite(selectpins[1],high);选中第二位
	numbershow(tempbit[3]);显示状态第二位
	delay(5);
	digitalwrite(selectpins[1],low);//释放第二位
	}
	state=1;
	}
else
	{
	for(int i=0;i<200;i++)
		{
	digitalwrite(statepin,high);//13号脚
	numbershow(1);//
	delay(5);
	digitalerite(statepin,low);//关掉
	digitalwrite(selectpins[0],high);选中第一位
	numbershow(tempbit[0]);显示报警第一位
	delay(5);
	digitalwrite(selectpins[0],low);释放
	digitalwrite(selectpins[1],high);选中第二位
		numbershow(tempbit[1]);显示报警第二位
		delay(5);
	digitalwrite(selectpins[1],low);//释放
		}		
state=0;
		
	}
}//不断循环显示
void numbershow(int number)
{
boolean bitval;
for(int n;n<8;n++)
	{
	bitval=bitread(number[number],n);//照应0-9//从最右开始读
	bitvalue=!bitvalue;//共阳极取反
	digitalwrite(segmentpins[n],bitvalue);//相应引脚置位显示
	}
}
